1917E - Construct Matrix - CodeForces Solution


constructive algorithms implementation math

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt" , "w" , stdout);
    #endif

    int t;
    cin>>t;

    while(t--)
    {
        int n,k;
        cin>>n>>k;

        int ans[n][n];

        for(int i = 0 ; i < n ; ++i)
        {
            for(int j = 0 ; j < n ; ++j)
            {
                ans[i][j] = 0;
            }
        }

        if(n == 2 && k == 2)
        {
            cout<<"Yes"<<endl;

            cout<<"1 0"<<endl<<"1 0"<<endl;
            continue;
        }

        if(k%2 != 0)
        {
            cout<<"No"<<endl;
        }     
        else
        {
            if((k == 2)  ||   ((n*n - k) ==  2))
            {
                if(n == 2)
                {
                    cout<<"Yes"<<endl;

                    ans[0][0] = 1;
                    ans[0][1] = 1;
                    ans[1][0]= 1;
                    ans[1][1] = 1;


                    for(int i = 0 ;  i < n ; ++i)
                    {
                        for(int j = 0 ; j < n ; ++j)
                        {
                            cout<<ans[i][j]<<" ";
                        }
                        cout<<endl;
                    }
                }
                else
                {
                    cout<<"No"<<endl;
                }
            }
            else
            {
                if(k%4 == 0)
                {
                    int cnt = k/4;

                    for(int i = 0 ; i < n ; i = i + 2)
                    {
                        if(!cnt) break;

                        for(int j = 0 ; j < n ; j =  j + 2)
                        {
                            if(cnt == 0) break;
                            ans[i][j] = 1;
                            ans[i+1][j] = 1;
                            ans[i][j+1] = 1;
                            ans[i+1][j+1] = 1;
                            cnt--;
                        }

                        if(cnt == 0) break;
                    }

                    
                }
                else{
                    
                        ans[0][0] = 1;
                        ans[0][1] = 1;
                        ans[1][0] = 1;
                        ans[2][1] = 1;
                        ans[1][2] = 1;
                        ans[2][2] = 1;

                        int cnt = k - 6;

                        if(k == (n*n - 6))
                        {
                            ans[0][2] = 1;
                            ans[0][3] = 1;
                            ans[3][2] = 1;
                            ans[3][3] = 1;
                            cnt = cnt - 4;
                        }

                        cnt = cnt/4;
                        for(int i = 0 ; i < n ; i = i + 2)
                        {
                            if(!cnt) break;

                            for(int j = 0 ; j < n ; j = j + 2)
                            {
                                if(i <4 && j < 4) continue;
                                
                                ans[i][j] = 1;
                                ans[i+1][j] = 1;
                                ans[i][j+1] = 1;
                                ans[i+1][j+1] = 1;
                                cnt--;
                                if(!cnt) break;
                            }

                            if(!cnt) break;
                        }


                    
                }

                cout<<"Yes"<<endl;
                for(int i = 0 ; i < n ; ++i)
                {
                    for(int j = 0 ; j < n ; ++j)
                    {
                        cout<<ans[i][j]<<" ";
                    }
                    cout<<endl;
                }
                
            }
        }
    }

}


Comments

Submit
0 Comments
More Questions

479C - Exams
1030A - In Search of an Easy Problem
158A - Next Round
71A - Way Too Long Words
160A - Twins
1A - Theatre Square
1614B - Divan and a New Project
791A - Bear and Big Brother
1452A - Robot Program
344A - Magnets
96A - Football
702B - Powers of Two
1036A - Function Height
443A - Anton and Letters
1478B - Nezzar and Lucky Number
228A - Is your horseshoe on the other hoof
122A - Lucky Division
1611C - Polycarp Recovers the Permutation
432A - Choosing Teams
758A - Holiday Of Equality
1650C - Weight of the System of Nested Segments
1097A - Gennady and a Card Game
248A - Cupboards
1641A - Great Sequence
1537A - Arithmetic Array
1370A - Maximum GCD
149A - Business trip
34A - Reconnaissance 2
59A - Word
462B - Appleman and Card Game